const util = require('../../utils/util');
const RoleService = require('../../service/system/role.service');

// 新增角色
async function createRole(ctx) {
	const { userId } = util.decodeToken(ctx);
	const { roleName, permissions, remark } = ctx.request.body;

	if (!roleName) {
		return util.fail(ctx, '角色名称不能为空');
	}

	const result = await RoleService.createRole({ roleName, permissions, remark, createId: userId });
	util.success(ctx, { id: result.id });
}

// 获取角色列表（分页）
async function listRoles(ctx) {
	const { roleName, page = '1', limit = '10' } = ctx.request.query;
	const result = await RoleService.getRoleList({
		roleName,
		page,
		limit,
	});
	util.success(ctx, result);
}

// 编辑角色
async function updateRole(ctx) {
	const { userId } = util.decodeToken(ctx);
	const { id, roleName, permissions, remark } = ctx.request.body;

	if (!id || isNaN(id)) {
		return util.fail(ctx, '角色 ID 无效');
	}
	if (!roleName) {
		return util.fail(ctx, '角色名称不能为空');
	}

	await RoleService.updateRole(Number(id), { roleName, permissions, remark, updateId: userId });
	util.success(ctx);
}

// 删除角色
async function deleteRole(ctx) {
	const { userId } = util.decodeToken(ctx);
	const { ids } = ctx.request.body;

	if (!ids) {
		return util.fail(ctx, '请提供角色 ID');
	}
	const idArray = Array.isArray(ids) ? ids : ids.split(',').map(Number);
	if (idArray.length === 0 || idArray.some((id) => isNaN(id))) {
		return util.fail(ctx, '请提供有效的角色 ID 数组');
	}

	await RoleService.deleteRole(idArray, userId);
	util.success(ctx);
}

// 获取角色菜单
async function getRoleMenus(ctx) {
	const { roleId } = ctx.request.query;
	const data = await RoleService.getRoleMenus(roleId);
	util.success(ctx, data);
}

// 保存角色菜单
async function saveRoleMenus(ctx) {
	const { roleId, menuIds } = ctx.request.body;

	// 参数校验
	if (!roleId) {
		return util.fail(ctx, '角色 ID 不能为空');
	}
	if (!Array.isArray(menuIds)) {
		return util.fail(ctx, '菜单 ID 数组不能为空');
	}

	try {
		await RoleService.saveRoleMenus(roleId, menuIds);
		util.success(ctx);
	} catch (error) {
		util.fail(ctx, error.message);
	}
}
module.exports = { createRole, listRoles, updateRole, deleteRole, getRoleMenus, saveRoleMenus };
